#include "Interno.h"

Interno::Interno(int nivel, long tamanio_nodo) : Nodo(nivel,tamanio_nodo) {
	this->hijos = new int[tamanio_nodo+ 2];
	this->espacioOcupado = TAM_CONTROL_NODO;
}

Interno::Interno(long tamanio_nodo) : Nodo(0,tamanio_nodo){
	this->hijos = new int[tamanio_nodo + 2];
	this->espacioOcupado = TAM_CONTROL_NODO;
}

Interno::~Interno() {
	delete[] hijos;
}

void Interno::serializar(char * buffer, unsigned int &offset){
	Persistor::transformar_entero_en_char(buffer, offset, this->nivel);
	Persistor::transformar_entero_en_char(buffer, offset, this->idNodo);
	Persistor::transformar_entero_en_char(buffer, offset, this->espacioOcupado);
	Persistor::transformar_entero_en_char(buffer, offset, this->contador_claves);
	for (int i = 0; i < contador_claves; i++){
		claves[i].serializar(buffer,offset);
	}
	for (int i = 0; i <= contador_claves; i++){
		Persistor::transformar_entero_en_char(buffer,offset,hijos[i]);
	}
}
void Interno::deserializar(char * buffer, unsigned int &offset){
	this->nivel = Persistor::obtener_entero_desde_Buffer(buffer,offset);
	this->idNodo = Persistor::obtener_entero_desde_Buffer(buffer,offset);
	this->espacioOcupado = Persistor::obtener_entero_desde_Buffer(buffer,offset);
	this->contador_claves = Persistor::obtener_entero_desde_Buffer(buffer,offset);
	for (int i = 0; i < contador_claves ; i++){
		Clave clave;
		clave.deserializar(buffer,offset);
		this->claves[i] = clave;
	}

	for (int i = 0; i <= contador_claves ; i++){
		this->hijos[i] = Persistor::obtener_entero_desde_Buffer(buffer,offset);
	}
}

int Interno::obtenerNivel (char* buffer){
	unsigned int offset = 0;
	return (Persistor::obtener_entero_desde_Buffer(buffer,offset));
}
